common.skill

এক্সেপশন হ্যান্ডলিং

Computer Programming - সি++ প্রোগ্রামিং (C++ Programming)
244
244

এক্সেপশন হ্যান্ডলিং (Exception Handling) হলো C++ এর এমন একটি প্রক্রিয়া, যা প্রোগ্রাম চলাকালীন সময়ে অপ্রত্যাশিত বা ভুল (error) পরিস্থিতি ঘটলে তা সনাক্ত করে এবং সেই ভুলকে সঠিকভাবে পরিচালনা করতে সাহায্য করে। এক্সেপশন হ্যান্ডলিং প্রোগ্রামের কার্যক্রম নিরবচ্ছিন্ন রাখে এবং ব্যবহারকারীদের সাথে বন্ধুসুলভ ব্যবহার করে।

C++ এ এক্সেপশন হ্যান্ডলিং করার জন্য মূলত তিনটি কীওয়ার্ড ব্যবহৃত হয়:

  1. try: যেখানে এক্সেপশন ঘটতে পারে এমন কোড রাখা হয়।
  2. catch: এক্সেপশন ধরা হলে এই ব্লকে এক্সেপশনটি হ্যান্ডল করা হয়।
  3. throw: এক্সেপশন বা ত্রুটি ঘটলে তা সনাক্ত করতে ব্যবহৃত হয়।

এক্সেপশন হ্যান্ডলিং প্রক্রিয়া

try ব্লক: এমন একটি ব্লক যেখানে এক্সেপশন ঘটতে পারে এমন কোড থাকে। যদি কোনো এক্সেপশন ঘটে, তবে তা throw দিয়ে ছুঁড়ে দেওয়া হয় এবং try ব্লক থেকে catch ব্লকে চলে যায়।

throw: try ব্লকের মধ্যে যখন কোনো ত্রুটি ঘটে, তখন throw ব্যবহার করে এক্সেপশনটি catch ব্লকে পাঠানো হয়।

catch ব্লক: catch ব্লক try ব্লকে ছুঁড়ে দেওয়া এক্সেপশন ধরতে পারে এবং সেগুলোর জন্য প্রয়োজনীয় সমাধান ব্যবস্থা নিতে পারে।


উদাহরণ: এক্সেপশন হ্যান্ডলিং

নিচে এমন একটি উদাহরণ দেওয়া হলো যেখানে সংখ্যা ভাগ করার সময় ডিভাইড-বাই-জিরো ত্রুটি থেকে রক্ষা করার জন্য এক্সেপশন হ্যান্ডলিং ব্যবহার করা হয়েছে।

#include <iostream>
using namespace std;

int main() {
    int numerator, denominator;
    cout << "Enter numerator: ";
    cin >> numerator;
    cout << "Enter denominator: ";
    cin >> denominator;

    try {
        if (denominator == 0) {
            throw "Division by zero is not allowed!";
        }
        cout << "Result: " << numerator / denominator << endl;
    }
    catch (const char* msg) {
        cout << "Error: " << msg << endl;
    }

    return 0;
}

বর্ণনা:

  • এখানে try ব্লকে ভাগফল নির্ণয়ের জন্য কোড লেখা হয়েছে। যদি denominator এর মান 0 হয়, তবে throw ব্যবহার করে একটি বার্তা ছুঁড়ে দেওয়া হয়েছে।
  • catch ব্লক throw দিয়ে ছুঁড়ে দেওয়া এক্সেপশন ধরেছে এবং সেই ত্রুটির বার্তা প্রিন্ট করেছে।

একাধিক এক্সেপশন হ্যান্ডলিং

একই try ব্লকে একাধিক ধরনের এক্সেপশন ঘটতে পারে এবং সেগুলোর জন্য আলাদা আলাদা catch ব্লক ব্যবহার করা যেতে পারে।

উদাহরণ: একাধিক catch ব্লক

#include <iostream>
using namespace std;

int main() {
    try {
        int num1, num2;
        cout << "Enter two numbers: ";
        cin >> num1 >> num2;

        if (num2 == 0) {
            throw 0; // ইন্ট টাইপ এক্সেপশন
        }

        if (num1 < 0 || num2 < 0) {
            throw "Negative numbers are not allowed"; // স্ট্রিং টাইপ এক্সেপশন
        }

        cout << "Result: " << num1 / num2 << endl;
    }
    catch (int e) {
        cout << "Error: Division by zero" << endl;
    }
    catch (const char* msg) {
        cout << "Error: " << msg << endl;
    }

    return 0;
}

বর্ণনা:

  • এখানে try ব্লকে দুটি এক্সেপশন হতে পারে: num2 এর মান 0 হলে ইন্ট টাইপ এক্সেপশন ছুঁড়ে দেওয়া হয়েছে এবং num1 বা num2 এর মান ঋণাত্মক হলে স্ট্রিং টাইপ এক্সেপশন ছুঁড়ে দেওয়া হয়েছে।
  • catch (int e) এবং catch (const char* msg) দুটি আলাদা catch ব্লক ব্যবহার করে বিভিন্ন এক্সেপশন হ্যান্ডল করা হয়েছে।

সব ধরনের এক্সেপশন ধরা

C++ এ catch(...) ব্যবহার করে যেকোনো ধরনের এক্সেপশন ধরতে একটি সাধারণ catch ব্লক তৈরি করা যায়, যা যেকোনো এক্সেপশন ধরতে পারে।

#include <iostream>
using namespace std;

int main() {
    try {
        throw 20;
    }
    catch (...) {
        cout << "An exception occurred!" << endl;
    }

    return 0;
}

বর্ণনা:

  • এখানে catch (...) সব ধরনের এক্সেপশন ধরতে সক্ষম, যার ফলে যেকোনো ধরনের এক্সেপশন হলেই এটি হ্যান্ডল করা যাবে।

এক্সেপশন হ্যান্ডলিংয়ের সুবিধা

  1. ত্রুটি মোকাবেলা: প্রোগ্রামে ত্রুটি ঘটলে সেটিকে সঠিকভাবে পরিচালনা করা যায়।
  2. প্রোগ্রাম স্থিতিশীলতা: এক্সেপশন হ্যান্ডলিং প্রোগ্রামকে বন্ধ না করে ত্রুটির জন্য বিকল্প ব্যবস্থা গ্রহণের সুযোগ দেয়।
  3. ব্যবহারকারীর সাথে বন্ধুসুলভ ব্যবহার: ত্রুটির সময় ব্যবহারকারীর জন্য অর্থবোধক বার্তা প্রদান করে।
  4. কোড পড়ার সহজতা: প্রোগ্রামে ত্রুটি ব্যবস্থাপনা করে কোড সহজে পড়া এবং পরিচালনা করা যায়।

এক্সেপশন হ্যান্ডলিং প্রোগ্রামের নমনীয়তা বৃদ্ধি করে এবং ব্যবহারে আরও নিরাপত্তা প্রদান করে। এটি C++ প্রোগ্রামিংয়ে ত্রুটি মোকাবেলার একটি শক্তিশালী উপায়।

common.content_added_by

এক্সেপশন কী এবং কেন দরকার

278
278

এক্সেপশন (Exception) হলো প্রোগ্রামে ঘটে যাওয়া এমন একটি অবস্থা বা ঘটনা, যা স্বাভাবিক প্রবাহে বাঁধা সৃষ্টি করে। C++ এ এক্সেপশন ব্যবস্থাপনার জন্য বিশেষ প্রক্রিয়া রয়েছে, যা প্রোগ্রাম চলাকালে কোনো অনাকাঙ্ক্ষিত সমস্যা দেখা দিলে তাকে সনাক্ত করে, পরিচালনা করে এবং প্রয়োজনীয় পদক্ষেপ গ্রহণ করতে সক্ষম করে।

এক্সেপশনের প্রয়োজনীয়তা

ত্রুটি শনাক্তকরণ এবং ম্যানেজমেন্ট: প্রোগ্রামে বিভিন্ন ত্রুটি (যেমন, ডিভাইড বাই জিরো, মেমোরি অ্যাক্সেস সমস্যা) তৈরি হতে পারে। এক্সেপশন ব্যবস্থাপনা প্রোগ্রামকে সেসব ত্রুটি সনাক্ত এবং ম্যানেজ করতে সাহায্য করে।

প্রোগ্রামের স্থায়িত্ব বজায় রাখা: এক্সেপশন ব্যবস্থাপনা ব্যবহার করে প্রোগ্রামের ত্রুটিপূর্ণ অংশের জন্য সমাধান তৈরি করা যায় এবং প্রোগ্রামকে ত্রুটির পরে চলমান রাখা সম্ভব হয়, ফলে প্রোগ্রামের স্থায়িত্ব বাড়ে।

কোডের সরলতা বৃদ্ধি: এক্সেপশন ব্যবস্থাপনা ব্যবহার করে প্রোগ্রামারেরা ত্রুটি নির্ণয় এবং সমাধান নির্দিষ্ট স্থানে রাখতে পারে, যা কোডের পঠনযোগ্যতা এবং রক্ষণাবেক্ষণ সহজ করে।

অপ্রত্যাশিত পরিস্থিতি হ্যান্ডলিং: প্রোগ্রামে প্রায়ই কিছু অপ্রত্যাশিত অবস্থা তৈরি হতে পারে, যেমন ফাইল না খোলা, মেমোরি আউট অব রেঞ্জ ইত্যাদি। এক্সেপশন ব্যবস্থাপনা প্রোগ্রামকে অপ্রত্যাশিত পরিস্থিতির জন্য প্রস্তুত করে এবং সেই অনুযায়ী কাজ করতে সক্ষম করে।

C++ এ এক্সেপশন ব্যবস্থাপনা

C++ এ এক্সেপশন ব্যবস্থাপনার জন্য তিনটি মূল কীওয়ার্ড রয়েছে:

  • try: এক্সেপশন হ্যান্ডল করার জন্য কোডটি try ব্লকের মধ্যে রাখা হয়।
  • catch: catch ব্লক ব্যবহার করে নির্দিষ্ট এক্সেপশন ধরা হয় এবং প্রয়োজনীয় সমাধান নেওয়া হয়।
  • throw: এক্সেপশন ঘটার সময় throw ব্যবহার করে একটি এক্সেপশন ছোড়া হয়।

উদাহরণ: এক্সেপশন ব্যবস্থাপনা

#include <iostream>
using namespace std;

int main() {
    int numerator, denominator;
    cout << "Enter numerator: ";
    cin >> numerator;
    cout << "Enter denominator: ";
    cin >> denominator;

    try {
        if (denominator == 0) {
            throw "Division by zero error"; // এক্সেপশন ছোড়া হচ্ছে
        }
        cout << "Result: " << numerator / denominator << endl;
    } catch (const char* msg) {
        cout << "Error: " << msg << endl; // এক্সেপশন ধরা হচ্ছে
    }

    return 0;
}

বর্ণনা:

  • এখানে try ব্লকে denominator এর মান 0 হলে, throw দিয়ে "Division by zero error" নামে একটি এক্সেপশন ছোড়া হয়েছে।
  • catch ব্লক সেই এক্সেপশন ধরে এবং msg এর মাধ্যমে ত্রুটি বার্তা প্রদর্শন করেছে।

এক্সেপশন ব্যবস্থাপনায় আরও উদাহরণ

উদাহরণ: বিভিন্ন ধরনের এক্সেপশন হ্যান্ডলিং

#include <iostream>
#include <stdexcept> // standard exceptions জন্য
using namespace std;

int main() {
    try {
        int *arr = new int[5];
        throw runtime_error("Runtime error occurred!"); // Runtime exception ছোড়া

        delete[] arr; // যদি উপরের লাইন কার্যকর হয় না, তবে এটি চলবে না
    }
    catch (const runtime_error& e) {
        cout << "Caught a runtime_error: " << e.what() << endl;
    }
    catch (const exception& e) {
        cout << "Caught an exception: " << e.what() << endl;
    }

    return 0;
}

বর্ণনা:

  • এখানে একটি runtime_error এক্সেপশন ছোড়া হয়েছে এবং catch ব্লক ব্যবহার করে সেই ত্রুটি হ্যান্ডল করা হয়েছে।
  • e.what() ফাংশনটি ব্যবহার করে এক্সেপশনের বার্তা প্রদর্শন করা হয়েছে।

এক্সেপশনের ধরন

স্ট্যান্ডার্ড এক্সেপশন: C++ এ stdexcept লাইব্রেরি থেকে কিছু সাধারণ এক্সেপশন পাওয়া যায়, যেমন logic_error, runtime_error, overflow_error, underflow_error, ইত্যাদি।

কাস্টম এক্সেপশন: প্রোগ্রামারেরা নিজস্ব প্রয়োজন অনুযায়ী কাস্টম এক্সেপশন তৈরি করতে পারেন।

উদাহরণ: কাস্টম এক্সেপশন

#include <iostream>
#include <exception>
using namespace std;

class CustomException : public exception {
public:
    const char* what() const noexcept override {
        return "Custom exception occurred!";
    }
};

int main() {
    try {
        throw CustomException(); // কাস্টম এক্সেপশন ছোড়া হচ্ছে
    }
    catch (const CustomException& e) {
        cout << e.what() << endl;
    }

    return 0;
}

বর্ণনা:

  • এখানে CustomException নামে একটি কাস্টম এক্সেপশন ক্লাস তৈরি করা হয়েছে, যা exception ক্লাস থেকে ইনহেরিট করা।
  • throw CustomException(); ব্যবহার করে কাস্টম এক্সেপশন ছোড়া হয়েছে এবং catch ব্লক সেটিকে ধরে e.what() এর মাধ্যমে বার্তা প্রদর্শন করেছে।

এক্সেপশন ব্যবস্থাপনার সুবিধা

  1. ত্রুটি হ্যান্ডলিং প্রক্রিয়া সহজ করে: এক্সেপশন ব্যবস্থাপনা ব্যবহার করে প্রোগ্রামিংয়ে ত্রুটি হ্যান্ডলিং প্রক্রিয়াকে আরও সহজ এবং কার্যকর করা যায়।
  2. প্রোগ্রামের স্থায়িত্ব বৃদ্ধি করে: এক্সেপশন ব্যবস্থাপনা ত্রুটি ঘটার পরেও প্রোগ্রামকে চলমান রাখতে সহায়তা করে।
  3. কোড সংক্ষিপ্ত এবং পঠনযোগ্য করে: এক্সেপশন ব্যবস্থাপনার মাধ্যমে কোডের ত্রুটি হ্যান্ডলিং প্রক্রিয়া এক জায়গায় সংরক্ষণ করা সম্ভব হয়।

সারসংক্ষেপ

  • এক্সেপশন হলো কোনো প্রোগ্রাম চলাকালে ঘটিত ত্রুটি বা অপ্রত্যাশিত ঘটনা।
  • try-catch-finally ব্লক ব্যবহার করে এক্সেপশন হ্যান্ডল করা যায়।
  • এক্সেপশন ব্যবস্থাপনা ত্রুটি নির্ণয় ও হ্যান্ডলিং প্রক্রিয়াকে সহজতর ও কার্যকর করে তোলে এবং প্রোগ্রামিংয়ে প্রোগ্রামের স্থায়িত্ব বাড়ায়।

এক্সেপশন ব্যবস্থাপনা C++ প্রোগ্রামিংয়ে অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি প্রোগ্রামকে স্থায়ী এবং কার্যকর রাখতে সহায়ক।

common.content_added_by

try, catch, throw ব্লক

257
257

C++ প্রোগ্রামিংয়ে try, catch, এবং throw ব্লক ব্যবহার করে এক্সেপশন হ্যান্ডলিং করা হয়। এগুলোর মাধ্যমে প্রোগ্রামের ভুল (error) বা অপ্রত্যাশিত পরিস্থিতিকে সনাক্ত করে তা সমাধান করা যায়।

try, catch, এবং throw কী?

try ব্লক: এখানে এমন কোড রাখা হয়, যেখানে এক্সেপশন (ত্রুটি) ঘটতে পারে। যখন একটি ত্রুটি ঘটে, তখন এটি throw ব্যবহার করে ত্রুটিটি ছুঁড়ে দেয় এবং try ব্লক থেকে বেরিয়ে যায়।

throw: যখন ত্রুটি ঘটে, তখন throw অপারেটর ব্যবহার করে ত্রুটি (এক্সেপশন) catch ব্লকে পাঠানো হয়। throw এর সাথে এক্সেপশনের ধরণ উল্লেখ করা হয়, যেমন int, char*, string ইত্যাদি।

catch ব্লক: catch ব্লক throw করা এক্সেপশন গ্রহণ করে এবং সেই অনুযায়ী ত্রুটি সমাধানের জন্য ব্যবস্থা গ্রহণ করে। catch ব্লকের প্যারামিটারে এক্সেপশনের ধরণ উল্লেখ করতে হয়, যাতে সঠিক ধরনের এক্সেপশন হ্যান্ডল করা যায়।


উদাহরণ: try, catch, এবং throw ব্লক

নিচে একটি উদাহরণ দেওয়া হলো যেখানে দুইটি সংখ্যার ভাগফল নির্ণয় করার সময় ডিভাইড-বাই-জিরো ত্রুটি থেকে রক্ষা করার জন্য try, catch, এবং throw ব্লক ব্যবহার করা হয়েছে।

#include <iostream>
using namespace std;

int main() {
    int numerator, denominator;
    cout << "Enter numerator: ";
    cin >> numerator;
    cout << "Enter denominator: ";
    cin >> denominator;

    try {
        if (denominator == 0) {
            throw "Division by zero is not allowed!"; // throw দিয়ে এক্সেপশন ছুঁড়ে দেওয়া
        }
        cout << "Result: " << numerator / denominator << endl;
    }
    catch (const char* msg) { // catch ব্লক এক্সেপশন গ্রহণ করে
        cout << "Error: " << msg << endl;
    }

    return 0;
}

বর্ণনা:

  • try ব্লকের মধ্যে বিভাজন অপারেশন করা হয়েছে। যদি denominator এর মান 0 হয়, তবে throw দিয়ে একটি বার্তা (স্ট্রিং টাইপ) ছুঁড়ে দেওয়া হয়েছে।
  • catch ব্লকটি সেই বার্তাটি গ্রহণ করে এবং কনসোলে প্রিন্ট করে।

আউটপুট (যদি denominator এ 0 ইনপুট দেওয়া হয়):

Enter numerator: 10
Enter denominator: 0
Error: Division by zero is not allowed!

একাধিক catch ব্লক

একই try ব্লক থেকে বিভিন্ন ধরনের এক্সেপশন ছুঁড়ে দেওয়া যেতে পারে এবং সেগুলোর জন্য আলাদা আলাদা catch ব্লক ব্যবহার করা যেতে পারে।

উদাহরণ: একাধিক catch ব্লক ব্যবহার

#include <iostream>
using namespace std;

int main() {
    try {
        int num1, num2;
        cout << "Enter two numbers: ";
        cin >> num1 >> num2;

        if (num2 == 0) {
            throw 0; // int টাইপ এক্সেপশন
        }

        if (num1 < 0 || num2 < 0) {
            throw "Negative numbers are not allowed"; // string টাইপ এক্সেপশন
        }

        cout << "Result: " << num1 / num2 << endl;
    }
    catch (int e) {
        cout << "Error: Division by zero" << endl;
    }
    catch (const char* msg) {
        cout << "Error: " << msg << endl;
    }

    return 0;
}

বর্ণনা:

  • এখানে try ব্লকে দুটি এক্সেপশন হতে পারে:
    • যদি num2 এর মান 0 হয়, তাহলে throw 0; দিয়ে int টাইপ এক্সেপশন ছুঁড়ে দেওয়া হয়।
    • যদি num1 বা num2 এর মান ঋণাত্মক হয়, তাহলে throw "Negative numbers are not allowed"; দিয়ে string টাইপ এক্সেপশন ছুঁড়ে দেওয়া হয়।
  • আলাদা catch ব্লক ব্যবহার করে বিভিন্ন এক্সেপশন হ্যান্ডল করা হয়েছে।

যেকোনো ধরনের এক্সেপশন ধরার জন্য catch(...)

C++ এ catch(...) ব্যবহার করে যেকোনো ধরনের এক্সেপশন ধরতে একটি সাধারণ catch ব্লক তৈরি করা যায়, যা যেকোনো এক্সেপশন ধরতে পারে।

#include <iostream>
using namespace std;

int main() {
    try {
        throw 20;
    }
    catch (...) {
        cout << "An exception occurred!" << endl;
    }

    return 0;
}

বর্ণনা:

  • এখানে catch(...) সব ধরনের এক্সেপশন ধরতে সক্ষম। try ব্লক থেকে যেকোনো এক্সেপশন ছুঁড়ে দিলেও catch(...) তা ধরবে।

আউটপুট:

An exception occurred!

সংক্ষিপ্তসার

  • try ব্লক: ত্রুটি ঘটার সম্ভাবনা থাকে এমন কোড থাকে, যেখানে এক্সেপশন হলে তা throw দিয়ে ছুঁড়ে দেওয়া হয়।
  • throw: ত্রুটি ঘটলে throw অপারেটর ব্যবহার করে এক্সেপশন catch ব্লকে পাঠানো হয়।
  • catch ব্লক: throw করা এক্সেপশন গ্রহণ করে এবং তার জন্য প্রয়োজনীয় সমাধান ব্যবস্থা গ্রহণ করে।

C++ এ এক্সেপশন হ্যান্ডলিং ব্যবহার করে প্রোগ্রামকে আরও স্থিতিশীল এবং ব্যবহারকারীর সাথে বন্ধুসুলভ করা যায়।

common.content_added_by

কাস্টম এক্সেপশন

225
225

কাস্টম এক্সেপশন (Custom Exception) হলো C++ এ প্রোগ্রামারের নিজের তৈরি করা এক্সেপশন, যা সাধারণত স্ট্যান্ডার্ড এক্সেপশন (যেমন std::runtime_error বা std::logic_error) থেকে আলাদা এবং নির্দিষ্ট ত্রুটিপূর্ণ অবস্থাগুলিকে আরও স্পষ্টভাবে নির্দেশ করে। কাস্টম এক্সেপশন ক্লাস তৈরি করে প্রোগ্রামের বিভিন্ন স্থানে নির্দিষ্ট ত্রুটি পরিচালনা করা সহজ হয়।

কাস্টম এক্সেপশন তৈরি করা

C++ এ কাস্টম এক্সেপশন তৈরি করার জন্য সাধারণত std::exception ক্লাসটি ইনহেরিট করতে হয় এবং what() মেথড ওভাররাইড করে কাস্টম ত্রুটি বার্তা প্রদান করা হয়।

উদাহরণ: কাস্টম এক্সেপশন

#include <iostream>
#include <exception>
using namespace std;

class DivisionByZeroException : public exception { // কাস্টম এক্সেপশন ক্লাস
public:
    const char* what() const noexcept override { // what() মেথড ওভাররাইড
        return "Error: Division by zero is not allowed!";
    }
};

int divide(int a, int b) {
    if (b == 0) {
        throw DivisionByZeroException(); // এক্সেপশন ছোড়া হচ্ছে
    }
    return a / b;
}

int main() {
    try {
        int result = divide(10, 0); // Division by zero এক্সেপশন ট্রিগার
        cout << "Result: " << result << endl;
    }
    catch (const DivisionByZeroException& e) { // কাস্টম এক্সেপশন হ্যান্ডল করা
        cout << e.what() << endl;
    }

    return 0;
}

বর্ণনা:

  • DivisionByZeroException নামে একটি কাস্টম এক্সেপশন ক্লাস তৈরি করা হয়েছে, যা std::exception ক্লাস থেকে ইনহেরিট করা।
  • what() মেথড ওভাররাইড করা হয়েছে, যা কাস্টম ত্রুটি বার্তা প্রদান করে।
  • divide() ফাংশনে যদি ডেনোমিনেটর 0 হয়, তবে DivisionByZeroException এক্সেপশন ছোড়া হয়।
  • main() ফাংশনে catch ব্লক সেই এক্সেপশন ধরে এবং what() মেথডের মাধ্যমে ত্রুটি বার্তা প্রদর্শন করে।

কাস্টম এক্সেপশন আরও উদাহরণ: ফাইল সম্পর্কিত কাস্টম এক্সেপশন

#include <iostream>
#include <fstream>
#include <exception>
using namespace std;

class FileNotFoundException : public exception {
public:
    const char* what() const noexcept override {
        return "Error: File not found!";
    }
};

void openFile(const string& filename) {
    ifstream file(filename);
    if (!file.is_open()) {
        throw FileNotFoundException(); // ফাইল না পাওয়া গেলে এক্সেপশন ছোড়া
    }
    cout << "File opened successfully!" << endl;
}

int main() {
    try {
        openFile("nonexistent.txt"); // যে ফাইলটি নেই তা ওপেন করতে চেষ্টা করা হচ্ছে
    }
    catch (const FileNotFoundException& e) { // কাস্টম এক্সেপশন ক্যাচ করা
        cout << e.what() << endl;
    }

    return 0;
}

বর্ণনা:

  • FileNotFoundException নামে একটি কাস্টম এক্সেপশন ক্লাস তৈরি করা হয়েছে, যা ফাইল না পাওয়ার ক্ষেত্রে নির্দিষ্ট ত্রুটি বার্তা প্রদান করে।
  • openFile() ফাংশনে যদি ফাইল খোলা সম্ভব না হয়, তবে FileNotFoundException এক্সেপশন ছোড়া হয় এবং main()catch ব্লকে সেটি ধরা হয়।

কাস্টম এক্সেপশন ক্লাস তৈরি করার সময় কিছু নির্দেশনা

  1. std::exception ক্লাস থেকে ইনহেরিট করা: এটি করা জরুরি নয়, তবে করা হলে std::exception এর বৈশিষ্ট্যগুলো সহজেই পাওয়া যায়।
  2. what() মেথড ওভাররাইড করা: কাস্টম বার্তা প্রদানের জন্য what() মেথড ওভাররাইড করে নির্দিষ্ট বার্তা প্রদান করা হয়।
  3. কাস্টম তথ্য পাস করা: যদি এক্সেপশনের সময় অতিরিক্ত তথ্য পাস করতে হয়, তবে কনস্ট্রাক্টরের মাধ্যমে সেই তথ্য গ্রহণ করা যেতে পারে।

উদাহরণ: কনস্ট্রাক্টরের মাধ্যমে বার্তা পাস করা

#include <iostream>
#include <exception>
#include <string>
using namespace std;

class CustomException : public exception {
    string message;
public:
    CustomException(const string& msg) : message(msg) {}

    const char* what() const noexcept override {
        return message.c_str();
    }
};

int main() {
    try {
        throw CustomException("Custom error occurred with additional details."); // কাস্টম বার্তা সহ এক্সেপশন ছোড়া হচ্ছে
    }
    catch (const CustomException& e) {
        cout << e.what() << endl; // কাস্টম বার্তা প্রদর্শন করা হচ্ছে
    }

    return 0;
}

বর্ণনা:

  • এখানে CustomException ক্লাসে একটি কনস্ট্রাক্টর যোগ করা হয়েছে, যা একটি বার্তা গ্রহণ করে।
  • what() মেথড ওভাররাইড করে সেই বার্তা প্রদর্শন করা হচ্ছে।

কাস্টম এক্সেপশনের সুবিধা

  1. বিশেষ ত্রুটি পরিচালনা: কাস্টম এক্সেপশন তৈরি করে বিশেষ ধরনের ত্রুটি সনাক্ত করা এবং সেগুলি সহজেই হ্যান্ডল করা যায়।
  2. কোডের পঠনযোগ্যতা বৃদ্ধি: কাস্টম এক্সেপশন ক্লাস ব্যবহার করলে কোডের পঠনযোগ্যতা বাড়ে এবং ত্রুটি হ্যান্ডলিং আরও পরিষ্কার হয়।
  3. পরিষ্কার বার্তা প্রদান: কাস্টম বার্তা প্রদান করে ত্রুটির সঠিক কারণ এবং অবস্থান সম্পর্কে স্পষ্ট ধারণা দেওয়া যায়।
  4. কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি: একবার একটি কাস্টম এক্সেপশন ক্লাস তৈরি করলে তা অন্যান্য ফাংশন বা মডিউলে পুনরায় ব্যবহার করা যায়।

সারসংক্ষেপ

  • কাস্টম এক্সেপশন হলো প্রোগ্রামারের নিজের তৈরি করা এক্সেপশন, যা বিশেষ ধরনের ত্রুটি হ্যান্ডলিংয়ে সহায়ক।
  • std::exception ক্লাস থেকে ইনহেরিট করে কাস্টম এক্সেপশন ক্লাস তৈরি করা যায়।
  • what() মেথড ওভাররাইড করে কাস্টম বার্তা প্রদান করা যায়।

কাস্টম এক্সেপশন ব্যবহার করে ত্রুটি হ্যান্ডলিং আরও নির্দিষ্ট এবং কার্যকরী করা যায়, যা বড় প্রোগ্রামে ত্রুটি সনাক্ত ও সমাধানকে সহজ করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion